In [1]:
debugDict = {
    'ModSchema': ['QAM','QAM','PSK','PSK'],
    'pulseShaping': ['rrc','square','rrc','square'],
    'txAmp': [40,40,40,40],
    'rxAmp': [20,20,20,20],
    'BER': [0.495,0.59,0.45,0.5545]
}
In [32]:
def plotBaseBandData(data,symbol,rxSymbol=[]):
    colors = np.zeros(len(data))
    if len(rxSymbol)>0:
        figure, axis = ploot.subplots(1, 2)
        for i in range(len(rxSymbol)):
            colors[i] = rxSymbol[i]/4
        axis[1].scatter(data.real,data.imag,c=colors)
        for i in range(len(symbol)):
            colors[i] = symbol[i]/4
        axis[0].scatter(data.real,data.imag,c=colors)
        ploot.show()
    else:
        for i in range(len(symbol)):
            colors[i] = symbol[i]/4
        ploot.scatter(data.real,data.imag,c=colors)
def Convolve(data1,data2):
    ans = np.zeros(len(data1),dtype=type(data1[0]))
    for i in range(0,len(data1)):
        for j in range(0,len(data2)):
            if i-j >=0:
                ans[i] = ans[i] + data1[i-j]*data2[j]
    return ans
def getSNRvsBER(snrMin,snrMax,step):
    snr = np.linspace(snrMin,snrMax,step)
    ber = np.zeros(len(snr))
    for i in range(len(snr)):
        rxAmpDB = 20
        pbRx = np.convolve(pb,ir,mode = 'same')
        pbRx = comm.awgn(pbRx,snr[i])
        pbRx = pbRx * (10**(rxAmpDB//20))
        bbRx = comm.downconvert(pbRx, int(samplingRate/symbolRate),carrierFreq,samplingRate)
        rxSymbols = comm.demodulate(bbRx,psk)
        ber[i] = comm.ber(comm.sym2bi(rxSymbols,m),comm.sym2bi(symbols,m))
    fig, ax = ploot.subplots(1, 1, figsize=(4, 4), layout='constrained')
    ax.set_xlabel('SNR')
    ax.set_ylabel('BER')
    ax.set_ylim(0,1)
    ax.set_xscale('log')
    ax.plot(snr,ber,'x',ls='-')
    return
def getBeamPattern(dictofDegree):
    ptrn = np.zeros((37,2))
    for i in range(len(ptrn)):
        ptrn[i][0] = -180 + i*10
        try:
            ptrn[i][1] = dictofDegree[-180 + i*10]
        except:
            ptrn[i][1] = 0
    return ptrn
def plotDiffData(rx_range_min,rx_range_max,samples,opt=True):
    rx_range = np.linspace(rx_range_min,rx_range_max,samples)
    berarr = np.zeros(len(rx_range))
    indx = 0
    for i in rx_range:
        env = pm.create_env2d(frequency=27000,tx_depth=60,rx_depth=5,depth=i,rx_range=100,bottom_absorption=0.1)
        arrivals = pm.compute_arrivals(env)
        ir = pm.arrivals_to_impulse_response(arrivals, fs=100000)
        pbRx = np.convolve(pb,abs(ir)[0:int(0.1*100000)])
        pbRx = pbRx[:len(pb)]
        #pbRx = pbRx + noise(100000,len(pb),3.6,0.1)
        #pbRx = generateUAN(pbRx,samplingRate,3.6,20)
        #pbRx = comm.awgn(pbRx,20)
        pbRx = pbRx * (10**(rxAmpDB//20))
        bbRx = comm.downconvert(pbRx, int(samplingRate/symbolRate),carrierFreq,samplingRate)
        if opt:
            rxSymbols = comm.demodulate(bbRx,getDemodConst(env))
        else:
            rxSymbols = comm.demodulate(bbRx,psk)
        print("Range: " + str(i))
        berarr[indx] = comm.ber(rxSymbols,symbols)
        print("BER: " + str(berarr[indx]))
        indx = indx + 1
        plotBaseBandData(bbRx,symbols,rxSymbol=rxSymbols)
    print("Average BER: "  + str(np.sum(berarr)/len(berarr)))
def generateUAN(signal,fs,snr,w):
    #Water noise spectrum
    xf = fftfreq(len(signal),1/fs)
    nff = np.zeros(len(xf))
    nff[1:len(xf)//2] = np.sqrt(50 + 7.5*np.sqrt(w) + 20 * np.log10(xf[1:len(xf)//2]/1000) - 40* np.log10(xf[1:len(xf)//2]/1000 + 0.4))
    nff[len(xf)//2:-1] = np.sqrt(50 + 7.5*np.sqrt(w) + 20 * np.log10(-1*xf[len(xf)//2:-1]/1000) - 40* np.log10(-1*xf[len(xf)//2:-1]/1000 + 0.4))
    nff = np.power(10,nff/20)
    noise_array = np.zeros(len(signal))
    nSignal = comm.awgn(signal,snr)
    noise_array = nSignal - signal
    noise_array_fft = fft(noise_array)
    fnoise_fft = noise_array_fft * nff
    noise = ifft(fnoise_fft).real
    return signal + noise
def noise(sampRate, lenSig, w, s): 
    f = np.linspace(1, int(sampRate/2)-1, int(lenSig))/1e3 # divide by 1000 to convert Hz to kHz
    nt = 17 - 30*np.log(f) # turbulence noise
    ns = 40 + 20*(s - 0.5) + 26*np.log(f) - 60*np.log(f+0.03) #ships noise
    nw = 50 + 7.5*(w**0.5) + 20*np.log(f) - 40*np.log(f+0.04) # wind noise
    nth = -15 + 20*np.log(f) # thermal noise
    tot_noise = nt + ns + nw + nth # total noise in db per Hz
    temp = np.power(10,tot_noise/20)
    phase = 2*np.pi*np.random.randn(lenSig)
    mag = np.sqrt(temp)
    FFT = mag * np.exp(1j*phase)
    noise = np.real(np.fft.ifft(FFT))
    return noise
def getDemodConst(env):
    arrivals = pm.compute_arrivals(env)
    ir = pm.arrivals_to_impulse_response(arrivals, fs=100000)
    ir = ir[0:int(0.1*100000)]
    dataSize = 56*8
    m = 2
    n = 1
    samplingRate = 100000
    carrierFreq = 27000
    bitRate = 80
    symbolRate = bitRate//n
    txAmpDB = 40
    rrcTaps = 6
    #data Modulation
    data =comm.random_data(dataSize, 2)
    symbols = comm.bi2sym(data,m)
    symbols[10:14] = [0,1,0,1]
    symbols[14:18] = [0,1,0,1]
    psk = comm.psk(m)
    bb1 = comm.modulate(symbols,psk)
    pb =  comm.upconvert(bb1, int(samplingRate/symbolRate),carrierFreq,samplingRate)
    #Power Amplification
    pb = pb * (10**(txAmpDB//20))
    
    
    rxAmpDB = 0
    #Received Signal
    pbRx = np.convolve(pb,abs(ir)[0:int(0.1*100000)])
    pbRx = pbRx[:len(pb)]
    #pbRx = pbRx + noise(100000,len(pb),3.6,0.1)
    
    pbRx = pbRx * (10**(rxAmpDB//20))

    
    bbRx = comm.downconvert(pbRx, int(samplingRate/symbolRate),carrierFreq,samplingRate)
    ans = np.zeros(2,dtype='complex128')
    ans[0] = (bbRx[10] + bbRx[12] + bbRx[14] + bbRx[16])/4
    ans[1] = (bbRx[11] + bbRx[13] + bbRx[15] + bbRx[17])/4
    print("_______________________________DEMOD CONST__________________________________________________________________")
    plotBaseBandData(bbRx[10:18],[0,1,0,1,0,1,0,1])
    plotBaseBandData(bbRx,symbols)
    print("____________________________________________________________________________________________________________")
    return ans
def demodulate(signal,constellation):
    symbls = np.zeros(len(signal))
    for i in range(len(signal)):
        min_indx = -1
        min_val = 1000
        for j in range(len(constellation)):
            tmp = signal[i] - constellation[j]
            tmp = tmp.real ** 2+ tmp.imag**2
            if min_val > tmp:
                min_indx = j
                min_val = tmp
        symbls[i] = min_indx
    return symbls
In [20]:
import arlpy.uwapm as pm
import arlpy.comms as comm
import arlpy.plot as plt
import arlpy.signal as signal
import numpy as np
from scipy.fft import fft, fftfreq,ifft
import matplotlib.pyplot as ploot
import math
import matplotlib.axes as axes
In [21]:
pm.models()
rx_range = 1000
tx_depth = 40
rx_depth = 10
print(np.rad2deg(np.arctan((tx_depth-rx_depth)/rx_range)))
env = pm.create_env2d(frequency=27000,tx_depth=60,rx_depth=45,depth=1000,rx_range=500,tx_directionality=getBeamPattern({0:20,10:20,20:20,-20:20,-10:20,30:20,-30:20}),bottom_absorption=0.1)
arrivals = pm.compute_arrivals(env)
rays = pm.compute_eigenrays(env)
pm.plot_rays(rays, env=env, width=900)
ir = pm.arrivals_to_impulse_response(arrivals, fs=100000)
pm.print_env(env)
plt.plot(abs(ir)[0:int(0.1*100000)],fs = 100000)
1.7183580016554572
                name : arlpy
   bottom_absorption : 0.1
      bottom_density : 1600
    bottom_roughness : 0
   bottom_soundspeed : 1600
               depth : 1000
        depth_interp : linear
           frequency : 27000
           max_angle : 80
           min_angle : -80
              nbeams : 0
            rx_depth : 45
            rx_range : 500
          soundspeed : 1500
   soundspeed_interp : spline
             surface : None
      surface_interp : linear
            tx_depth : 60
   tx_directionality : [[-180.    0.]
                        [-170.    0.]
                        [-160.    0.]
                        [-150.    0.]
                        [-140.    0.]
                        [-130.    0.]
                        [-120.    0.]
                        [-110.    0.]
                        [-100.    0.]
                        [ -90.    0.]
                        [ -80.    0.]
                        [ -70.    0.]
                        [ -60.    0.]
                        [ -50.    0.]
                        [ -40.    0.]
                        [ -30.   20.]
                        [ -20.   20.]
                        [ -10.   20.]
                        [   0.   20.]
                        [  10.   20.]
                        [  20.   20.]
                        [  30.   20.]
                        [  40.    0.]
                        [  50.    0.]
                        [  60.    0.]
                        [  70.    0.]
                        [  80.    0.]
                        [  90.    0.]
                        [ 100.    0.]
                        [ 110.    0.]
                        [ 120.    0.]
                        [ 130.    0.]
                        [ 140.    0.]
                        [ 150.    0.]
                        [ 160.    0.]
                        [ 170.    0.]
                        [ 180.    0.]]
                type : 2D
In [ ]:
 
In [5]:
print(len(ir))

# Number of samples in normalized_tone
N = len(abs(ir)[0:int(0.1*100000)])

yf = fft(ir[0:int(0.1*100000)])
xf = fftfreq(N, 1 / 100000)

plt.plot(xf, np.abs(yf))
110891
In [ ]:
 
In [22]:
#data Generation and Config

dataSize = 2000
m = 2
n = 1
samplingRate = 100000
carrierFreq = 27000
bitRate = 80
symbolRate = bitRate//n
txAmpDB = 40
rrcTaps = 6
#data Modulation

symbols =comm.random_data(dataSize, 2)
#symbols = comm.bi2sym(data,m)
psk = comm.psk(m)
bb1 = comm.modulate(symbols,psk)
pb =  comm.upconvert(bb1, int(samplingRate/symbolRate),carrierFreq,samplingRate)

#Power Amplification

pb = pb * (10**(txAmpDB//20))

#Plotting

time = signal.time(pb,100000)
plt.plot(time,pb)
In [23]:
rxAmpDB = 0
#Received Signal
pbRx = np.convolve(pb,abs(ir)[0:int(0.1*100000)])
pbRx = pbRx[:len(pb)]
pbRx = pbRx + noise(100000,len(pb),3.6,0.1)
#pbRx = generateUAN(pbRx,samplingRate,3.6,20)
#pbRx = comm.awgn(pbRx,20)
#Power Amplification

pbRx = pbRx * (10**(rxAmpDB//20))

#plotting
time = signal.time(pbRx,100000)
plt.plot(time,noise(100000,len(pb),3.6,0.1))
In [9]:
#Demodulating Signal
bbRx = comm.downconvert(pbRx, int(samplingRate/symbolRate),carrierFreq,samplingRate)
rxSymbols = demodulate(bbRx,getDemodConst(env))
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
In [10]:
bbRx = comm.downconvert(pbRx, int(samplingRate/symbolRate),carrierFreq,samplingRate)
rxSymbols = demodulate(bbRx,getDemodConst(env))
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
In [11]:
comm.ber(comm.sym2bi(rxSymbols,m),comm.sym2bi(symbols,m))
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[11], line 1
----> 1 comm.ber(comm.sym2bi(rxSymbols,m),comm.sym2bi(symbols,m))

File ~\miniconda3\lib\site-packages\arlpy\comms.py:117, in sym2bi(x, m)
    115 x = _np.asarray(x, dtype=_np.int64)
    116 if _np.any(x < 0) or _np.any(x >= m):
--> 117     raise ValueError('Invalid data for specified m')
    118 y = _np.zeros((len(x), n), dtype=_np.int64)
    119 for i in range(n):

ValueError: Invalid data for specified m
In [ ]:
plotBaseBandData(bb1,symbols)
In [ ]:
plotBaseBandData(bbRx,symbols,rxSymbols)
In [33]:
plotDiffData(100,1500,50)
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 100.0
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 128.57142857142858
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 157.14285714285714
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 185.71428571428572
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 214.28571428571428
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 242.85714285714286
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 271.42857142857144
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 300.0
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 328.57142857142856
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 357.14285714285717
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 385.7142857142857
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 414.2857142857143
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 442.8571428571429
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 471.42857142857144
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 500.0
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 528.5714285714287
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 557.1428571428571
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 585.7142857142858
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 614.2857142857143
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 642.8571428571429
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 671.4285714285714
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 700.0
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 728.5714285714286
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 757.1428571428572
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 785.7142857142858
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 814.2857142857143
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 842.8571428571429
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 871.4285714285714
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 900.0
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 928.5714285714287
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 957.1428571428572
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 985.7142857142858
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1014.2857142857143
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1042.857142857143
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1071.4285714285716
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1100.0
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1128.5714285714287
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1157.142857142857
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1185.7142857142858
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1214.2857142857144
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1242.857142857143
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1271.4285714285716
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1300.0
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1328.5714285714287
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1357.142857142857
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1385.7142857142858
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1414.2857142857144
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1442.857142857143
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1471.4285714285716
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 1500.0
BER: 0.0
Average BER: 0.0
In [28]:
plotDiffData(50,150,20,opt=False)
Range: 50.0
BER: 0.0
Range: 55.26315789473684
BER: 0.0
Range: 60.526315789473685
BER: 0.875
Range: 65.78947368421052
BER: 0.0
Range: 71.05263157894737
BER: 0.133
Range: 76.31578947368422
BER: 1.0
Range: 81.57894736842105
BER: 0.0
Range: 86.84210526315789
BER: 0.0
Range: 92.10526315789474
BER: 0.0
Range: 97.36842105263159
BER: 0.0
Range: 102.63157894736842
BER: 0.0
Range: 107.89473684210526
BER: 1.0
Range: 113.15789473684211
BER: 0.0
Range: 118.42105263157896
BER: 0.0
Range: 123.6842105263158
BER: 0.0
Range: 128.94736842105263
BER: 0.0
Range: 134.21052631578948
BER: 0.0
Range: 139.47368421052633
BER: 0.0
Range: 144.73684210526318
BER: 0.0
Range: 150.0
BER: 0.0
Average BER: 0.1504
In [30]:
plotDiffData(50,150,100)
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 50.0
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 51.01010101010101
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 52.02020202020202
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 53.03030303030303
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 54.04040404040404
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 55.05050505050505
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 56.06060606060606
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 57.07070707070707
BER: 0.5815
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 58.08080808080808
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 59.09090909090909
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 60.101010101010104
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 61.111111111111114
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 62.121212121212125
BER: 0.0655
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 63.131313131313135
BER: 0.2495
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 64.14141414141415
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 65.15151515151516
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 66.16161616161617
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 67.17171717171718
BER: 0.069
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 68.18181818181819
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 69.1919191919192
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 70.20202020202021
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 71.21212121212122
BER: 0.0655
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 72.22222222222223
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 73.23232323232324
BER: 0.0655
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 74.24242424242425
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 75.25252525252526
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 76.26262626262627
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 77.27272727272728
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 78.28282828282829
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 79.2929292929293
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 80.30303030303031
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 81.31313131313132
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 82.32323232323233
BER: 0.2725
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 83.33333333333334
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 84.34343434343435
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 85.35353535353536
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 86.36363636363637
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 87.37373737373738
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 88.3838383838384
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 89.3939393939394
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 90.40404040404042
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 91.41414141414143
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 92.42424242424244
BER: 0.2085
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 93.43434343434345
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 94.44444444444446
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 95.45454545454547
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 96.46464646464648
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 97.47474747474749
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 98.48484848484848
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 99.4949494949495
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 100.5050505050505
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 101.51515151515152
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 102.52525252525253
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 103.53535353535354
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 104.54545454545455
BER: 0.1435
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 105.55555555555556
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 106.56565656565657
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 107.57575757575758
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 108.58585858585859
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 109.5959595959596
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 110.60606060606061
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 111.61616161616162
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 112.62626262626263
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 113.63636363636364
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 114.64646464646465
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 115.65656565656566
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 116.66666666666667
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 117.67676767676768
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 118.68686868686869
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 119.6969696969697
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 120.70707070707071
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 121.71717171717172
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 122.72727272727273
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 123.73737373737374
BER: 0.009
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 124.74747474747475
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 125.75757575757576
BER: 0.02
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 126.76767676767678
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 127.77777777777779
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 128.7878787878788
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 129.7979797979798
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 130.80808080808083
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 131.8181818181818
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 132.82828282828285
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 133.83838383838383
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 134.84848484848487
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 135.85858585858585
BER: 0.1875
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 136.8686868686869
BER: 0.3805
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 137.87878787878788
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 138.8888888888889
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 139.8989898989899
BER: 0.106
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 140.90909090909093
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 141.91919191919192
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 142.92929292929296
BER: 0.015
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 143.93939393939394
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 144.94949494949498
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 145.95959595959596
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 146.96969696969697
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 147.97979797979798
BER: 0.26
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 148.989898989899
BER: 0.0
_______________________________DEMOD CONST__________________________________________________________________
____________________________________________________________________________________________________________
Range: 150.0
BER: 0.0
Average BER: 0.02699
In [ ]:
58.16326530612245
59.183673469387756
In [19]:
env = pm.create_env2d(frequency=27000,tx_depth=50,rx_depth=1,depth=100,rx_range=58.16326530612245,bottom_absorption=0.1)
arrivals = pm.compute_arrivals(env)
ir = pm.arrivals_to_impulse_response(arrivals, fs=100000)
plt.plot(abs(ir),fs=samplingRate)
rays = pm.compute_eigenrays(env)
pm.plot_rays(rays, env=env, width=900)
In [18]:
env = pm.create_env2d(frequency=27000,tx_depth=50,rx_depth=1,depth=100,rx_range=59.183673469387756,bottom_absorption=0.1)
arrivals = pm.compute_arrivals(env)
ir = pm.arrivals_to_impulse_response(arrivals, fs=100000)
plt.plot(abs(ir),fs=samplingRate)
rays = pm.compute_eigenrays(env)
pm.plot_rays(rays, env=env, width=900)
In [85]:
 
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[85], line 1
----> 1 comm.ber(comm.sym2bi(rxSymbols,m),comm.sym2bi(symbols,m))

File ~\miniconda3\lib\site-packages\arlpy\comms.py:417, in ber(x, y, m)
    415     raise ValueError('Invalid data for specified m')
    416 if m == 2:
--> 417     return ser(x, y)
    418 if m > _MAX_M:
    419     raise ValueError('m > %d not supported' % (_MAX_M))

File ~\miniconda3\lib\site-packages\arlpy\comms.py:397, in ser(x, y)
    395 y = _np.asarray(y, dtype=_np.int64)
    396 n = _np.product(_np.shape(x))
--> 397 e = _np.count_nonzero(x^y)
    398 return float(e)/n

ValueError: operands could not be broadcast together with shapes (5000000,) (2000,) 
In [18]:
 
Out[18]:
0.025
In [ ]:
 
In [18]:
#Getting Equalizer coefficients
trainSymbols = [0,1,2,3,2,1,0,2,3,1,2,0,3,1,3,0,0,1,2,3,2,1,0,2,3,1,2,0,3,1,3,0]
psk = comm.psk(4)
bb1 = comm.modulate(trainSymbols,psk)
#Upsampling
bb1 =  comm.upconvert(bb1, int(samplingRate/symbolRate),0,samplingRate)

#Power Amplification
bb1 = bb1 * (10**(txAmpDB//20))

#Channel Modelling
bbChn = Convolve(bb1,ir)
#modulating
pbChn =  comm.upconvert(bbChn,1,carrierFreq,samplingRate)
pbChn = comm.awgn(pbChn,20)
pb = comm.upconvert(bb1,1,carrierFreq,samplingRate)
#Plotting
time = signal.time(pbChn,samplingRate)
plt.plot(time,pbChn)

time = signal.time(pb,samplingRate)
plt.plot(time,pb)
---------------------------------------------------------------------------
KeyboardInterrupt                         Traceback (most recent call last)
Cell In[18], line 12
      9 bb1 = bb1 * (10**(txAmpDB//20))
     11 #Channel Modelling
---> 12 bbChn = Convolve(bb1,ir)
     13 #modulating
     14 pbChn =  comm.upconvert(bbChn,1,carrierFreq,samplingRate)

Cell In[2], line 10, in Convolve(data1, data2)
      8 for i in range(0,len(data1)):
      9     for j in range(0,len(data2)):
---> 10         if i-j >=0:
     11             ans[i] = ans[i] + data1[i-j]*data2[j]
     12 return ans

KeyboardInterrupt: 
In [ ]:
#Demodulating Signal
bbRx = comm.downconvert(pbChn, int(samplingRate/symbolRate),carrierFreq,samplingRate)
bbTrueRx = comm.downconvert(pb, int(samplingRate/symbolRate),carrierFreq,samplingRate)
rxSymbols = comm.demodulate(bbTrueRx,psk)
In [ ]:
def getEqCoeff(bbhat,bb,ntap,stepfactor=0.01,convergance=0.001):
    bbRxReal = bbhat.real
    bbRxImag = bbhat.imag
    bbRxTrueReal = bb.real
    bbRxTrueImag = bb.imag
    eqCoeffReal = np.zeros(len(bbRxReal))
    eqCoeffImag = np.zeros(len(bbRxImag))
    
    while()
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [ ]:
 
In [137]:
ir1 = np.zeros(100000,dtype=type(ir[0]))
In [129]:
ir1[0] =complex(1,1)
ir1[50000] = complex(0.01,0.05)
ir1[10000] = complex(0.2,0.05)
ir1[15000] = complex(0.01,0.05)
ir1[7000] = complex(0.3,0.5)
ir1[60000] = complex(0.01,0.05)
In [138]:
ir1[40000] = complex(1,1)
In [139]:
print(len(ir1))

# Number of samples in normalized_tone
N = len(ir1)

yf = fft(ir1)
xf = fftfreq(N, 1 / 100000)

plt.plot(xf, np.abs(yf))
100000
In [140]:
plt.plot(abs(ir1),fs = 100000)
In [110]:
x = complex(1,1)
In [111]:
x
Out[111]:
(1+1j)
In [112]:
type(x)
Out[112]:
complex
In [298]:
1/40
Out[298]:
0.025
In [10]:
len(beampattern[0])
Out[10]:
2
In [18]:
x = {0:20
In [20]:
 
Out[20]:
20
In [35]:
plt.plot(abs(ir),fs = 100000)
In [36]:
plt.plot(abs(ir)[0:10000],fs = 100000)
In [41]:
abs(ir)
[4.92515005e-02 0.00000000e+00 0.00000000e+00 ... 0.00000000e+00
 0.00000000e+00 2.02418723e-05]
In [44]:
k = abs(ir)[0:5000]
In [45]:
for i in range(5000):
    if k[i] != abs(ir)[i]:
        print(i)
In [47]:
plt.plot(k,fs = 100000)
In [23]:
!jupyter nbconvert --to html equalizer.ipynb
[NbConvertApp] Converting notebook equalizer.ipynb to html
[NbConvertApp] Writing 12068339 bytes to equalizer.html
In [ ]: